# -*- coding:utf-8 -*-
import datetime
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.db import models
from django.db.models import signals
from django.db.models.signals import post_save
from django.template.defaultfilters import slugify

__author__ = 'Junior Lima'

from evento.thumbs import ImageWithThumbsField

SEXO_CHOICES = (('M', 'Masculino'),('F', 'Feminino'),)
CHOICES_STATUS_PAGAMENTO = (('1', 'pago'),('2', 'pendente'),('3', 'cortesia'),)

class Tema(models.Model):
    nome = models.CharField('Nome do tema', max_length=50, unique=True)
    arquivo = models.FileField('Arquivo do tema', upload_to='estilo')

class Evento(models.Model):
    # Dados do Evento
    ativo = models.BooleanField('Publicar', default=True)
    pagamento = models.BooleanField('Permitir pagamento', default=True)
    nome = models.CharField('Nome do Evento', max_length=50, unique=True)
    descricao = models.TextField('Apresentação', blank=True, null=True)
    tema = models.ForeignKey(Tema)
    # Dados sobre o evento
    participantes_maximo = models.PositiveIntegerField('Máximo número de participantes')
    data_inicio = models.DateField('Data de início')
    data_fim = models.DateField('Data de limite de inscrição')
    valor = models.DecimalField(default=0, max_digits=8, decimal_places=2, help_text='Em reais (R$) 20.00')

    # Dados de contato
    telefone = models.CharField('Telefone para informações', max_length=15)
    email = models.EmailField('Email', max_length=70)
    foto = ImageWithThumbsField('Imagem Destaque', upload_to='evento/arquivos', sizes=((935,307),(300,225)))

    slugevento = models.SlugField(max_length=50)
    cliques = models.IntegerField('Cliques', default=0, editable=False)
    def __unicode__(self):
        return self.nome
    def get_absolute_url(self):
        return reverse('evento.views.inicial', kwargs={'slugevento': self.slugevento})
    class Meta:
        verbose_name = 'Cadastrar evento'
        verbose_name_plural = 'Cadastrar eventos'

class Palestra(models.Model):
    programacaoevento = models.ForeignKey(Evento, verbose_name='Evento')
    descricao = models.TextField('Informações sobre programação do evento', blank=True, null=True)
    def __unicode__(self):
        return self.programacaoevento.nome
    class Meta:
        verbose_name = 'Programação do evento'
        verbose_name_plural = 'Programação do evento'

class ImagemEvento(models.Model):
    publicar = models.BooleanField(default=True)
    nome = models.CharField(max_length=100)
    fotocapa = ImageWithThumbsField('Imagem Destaque', upload_to='evento/arquivos', sizes=((800,600),(300,225)))

class DiaEvento(models.Model):
    diaprogramacao = models.ForeignKey(Palestra)
    dataprogramacao = models.DateField('Data da atividade')
    descricao = models.TextField('Descreva a atividade do horário')

class Pessoa(models.Model):
    nome = models.CharField(max_length=100)
    nascimento = models.DateField('Data de nascimento', blank=True, null=True)
    sexo = models.CharField(max_length=1, choices=SEXO_CHOICES)
    cpf = models.CharField(max_length=11)
    telefone = models.CharField(max_length=15)
    celular = models.CharField(max_length=15, blank=True, null=True)
    email = models.EmailField('Email', max_length=100)
    igreja = models.CharField('Nome da igreja que frequenta', max_length=30)
    def __unicode__(self):
        return self.nome
    def __unicode__(self):
        return self.nome

    class Meta:
        verbose_name = 'Pessoa'
        verbose_name_plural = 'Pessoa'

class Palestrante(Pessoa):
    # Dados que aparecerão no site
    descricao = models.TextField('Descrição')
    foto = ImageWithThumbsField('Imagem Destaque', upload_to='evento/arquivos', sizes=((800,600),(300,225)))
    slugpalestrante = models.SlugField(max_length=50)
    cliques = models.IntegerField('Cliques', default=0, editable=False)
    evento = models.ForeignKey(Evento)
    def __unicode__(self):
        return self.nome
    class Meta:
        verbose_name = 'Palestrante'
        verbose_name_plural = 'Palestrantes'


class InscricaoEvento(models.Model):
    confirmacao = models.BooleanField('Confirmação de pagamento', default=False)
    pagamento = models.CharField(choices=CHOICES_STATUS_PAGAMENTO, max_length=2, default=1)
    pessoa = models.ForeignKey(Pessoa)
    evento = models.ForeignKey(Evento, blank=True, null=True)
    valor = models.DecimalField(max_digits=8, decimal_places=2, default=20.00)
    data_pagamento = models.DateField(blank=True, null=True)
    data_inscricao = models.DateTimeField(auto_now_add=True)
    codigo = models.CharField(max_length=200)
    class Meta:
        unique_together = ('pessoa', 'evento')
        verbose_name = 'Inscrição'
        verbose_name_plural = 'Inscrições'
    def save(self):
        if (self.pk is None):
            self.codigo = self.codigogerado()
        if self.data_pagamento != None:
            self.confirmacao = 0
        super(InscricaoEvento, self).save()
    def codigogerado(self):
        idpessoa = int(self.pessoa.id)
        idevento = int(self.evento.id)
        gerado = "%02d%02d" %(idpessoa, idevento)
        return gerado
    def getevento(self):
        return Evento.objects.filter(id = self.evento).filter(pessoa = self.pessoa)

# Evento
class Noticia(models.Model):
    publicar = models.BooleanField(default=True)
    titulo = models.CharField(max_length=100)
    subtitulo = models.CharField(max_length=200)
    conteudo = models.TextField('Conteúdo')
    imagem = ImageWithThumbsField('Imagem Destaque', upload_to='evento', sizes=((800,600),(300,225)), blank=True)
    slugnoticia = models.SlugField(max_length=200, blank=True, unique=True, editable=False)
    datacriacao = models.DateTimeField('Data', default=datetime.datetime.now)
    dataedicao = models.DateTimeField(auto_now=True)
    cliques = models.IntegerField('Cliques', default=0, editable=False)
    evento = models.ForeignKey(Evento, blank=True, null=True)
    class Meta:
        unique_together = ('titulo', 'evento')
        verbose_name = 'Notícia do evento'
        verbose_name_plural = 'Notícia dos eventos'

def evento_pre_save(signal, instance, sender, **kwargs):
    instance.slugevento = slugify(instance.nome)

signals.pre_save.connect(evento_pre_save, sender=Evento)

class Responsavel(Pessoa):
    foto = ImageWithThumbsField('Imagem Destaque', upload_to='evento/arquivos', sizes=((400,300),(200,150)))
    user = models.OneToOneField(User) # Relacionamento entre usuário e jogador
    evento = models.ForeignKey(Evento)
    def __unicode__(self):
        return self.nome
    class Meta:
        verbose_name = 'Responsável pelo evento'
        verbose_name_plural = 'Responsáveis pelo evento'

